Stack Smash Protector
SSPと略される。
Canary(カナリア)をスタックフレームの特定の位置に配置する
ローカル変数が配置される領域と、フレームのbpレジスタの値を保存しておく領域の間
C言語の例
code: scan.c
#include <stdio.h>
int main(void)
{
char s10;
scanf("%s", s);
return 0;
}
scanfの脆弱性
SSPが無効な場合
$ gcc scan.c -o scan_nossp -fno-stack-protector
cf. gccでStack Smash Protectorを無効にする
$ ./scan_nossp
(入力)aaaaaaaaaaaaaaaaaaaa
Segmentation fault
SSPが有効な場合
$ gcc scan.c -o scan_ssp
$ ./scan_ssp
(入力)aaaaaaaaaaaaaaaaaaa
*** stack smashing detected ***: terminated
Aborted